// 注意是整个左子树的节点值都要严格小于当前节点值
struct TreeNode *prev; 
bool dfs(struct TreeNode *root) {
    if (root == NULL) return true;

	// 中序遍历，prev节点值要小于当前节点
    if ( dfs(root->left) && (prev == NULL || root->val > prev->val) ) {
        prev = root;
        return dfs(root->right);
    } else {
        return false;
    }
}

bool isValidBST(struct TreeNode* root){
    prev = NULL;
    return dfs(root);
}